bitkeeper revision 1.1245.1.1 (42386d63YMsPB-xQ5vhzdFj1gbQ5kg)
authorrneugeba@wyvis.research.intel-research.net <rneugeba@wyvis.research.intel-research.net>
Wed, 16 Mar 2005 17:31:15 +0000 (17:31 +0000)
committerrneugeba@wyvis.research.intel-research.net <rneugeba@wyvis.research.intel-research.net>
Wed, 16 Mar 2005 17:31:15 +0000 (17:31 +0000)
added counter for pagefaults

Signed-off-by: michael.fetterman@cl.cam.ac.uk
linux-2.6.10-xen-sparse/arch/xen/i386/kernel/syscall_stats.c
linux-2.6.10-xen-sparse/arch/xen/i386/mm/fault.c

index e614a316f9527507ac545fc7854aab76f6d491fc..4e6e1ff2f711cc4794d9a141a49ae27f1f2ace53 100644 (file)
 unsigned long syscall_stats[NR_syscalls];
 static unsigned char foobar[4];
 
+unsigned long c_do_page_fault;
+unsigned long c_minor_page_fault;
+unsigned long c_major_page_fault;
+
 /* a write just resests the counter */
 static ssize_t syscall_write(struct file *f, const  char *data,
                              size_t size, loff_t  *pos)
 {
     printk("resetting syscall stats\n");
     memset(&syscall_stats, 0, sizeof(syscall_stats));
+    c_do_page_fault = 0;
+    c_minor_page_fault = 0;
+    c_major_page_fault = 0;
     return size;
 }
 
@@ -36,6 +43,9 @@ static int show_syscall(struct seq_file *m, void *v)
         seq_printf(m, "%lu ", syscall_stats[i]);
     }
     seq_printf(m, "\n");
+    seq_printf(m, "%lu %lu %lu\n", c_do_page_fault,
+               c_minor_page_fault, c_major_page_fault);
+    
     return 0;
 }
 
index f5c7c16c68a4e9a7c8304b420ace698b21ebeb60..ab55b4a5627937bf03bba72be37ecd3f31d68ea3 100644 (file)
@@ -216,6 +216,11 @@ fastcall void do_invalid_op(struct pt_regs *, unsigned long);
  *     bit 1 == 0 means read, 1 means write
  *     bit 2 == 0 means kernel, 1 means user-mode
  */
+
+extern unsigned long c_do_page_fault;
+extern unsigned long c_minor_page_fault;
+extern unsigned long c_major_page_fault;
+
 fastcall void do_page_fault(struct pt_regs *regs, unsigned long error_code,
                              unsigned long address)
 {
@@ -226,6 +231,8 @@ fastcall void do_page_fault(struct pt_regs *regs, unsigned long error_code,
        int write;
        siginfo_t info;
 
+    c_do_page_fault++;
+
        /* Set the "privileged fault" bit to something sane. */
        error_code &= 3;
        error_code |= (regs->xcs & 2) << 1;
@@ -359,9 +366,11 @@ good_area:
        switch (handle_mm_fault(mm, vma, address, write)) {
                case VM_FAULT_MINOR:
                        tsk->min_flt++;
+            c_minor_page_fault++;
                        break;
                case VM_FAULT_MAJOR:
                        tsk->maj_flt++;
+            c_major_page_fault++;
                        break;
                case VM_FAULT_SIGBUS:
                        goto do_sigbus;